package com.flower.algorithm.linklist;

/**
 * @ClassName DLinkListSolution
 * @Description TODO
 * @Author 吃麻椒的花酱
 * @Date 2021/11/9 13:58
 * @Version 1.0
 */
public class DLinkListSolution {

    // 初始化空的双向链表
    DListNode head=new DListNode(0);
    // 头插法建立双向链表
    public void creatLDlistNode(DListNode newNode){
       DListNode temp=head;
       newNode.next=temp.next;
       if (temp.next != null) {
           temp.next.pre=newNode;
       }
       temp.next = newNode;
       newNode.pre=temp;
    }
    //尾插法建立双向链表 先遍历链表找到为节点 然后插入
    public void creatRDlistNode(DListNode newNode){
        DListNode temp = head;
        while(temp.next != null) {
            temp=temp.next;
        }
        newNode.next = temp.next;
        temp.next = newNode;
        newNode.pre=temp;
    }


    // 删除双向链表
    public void deleteDlistNode(int a){
       if(head==null||head.next != null){
           return;
       }
       DListNode temp = head.next;
        while (temp!=null){
            if(temp.val==a)
            {
                if (temp.next!=null) {
                    temp.next.pre=temp.pre;
                    temp.pre.next=temp.next;
                }
                else{
                    temp.pre.next=null;
                    temp.pre=null;
                }
                break;
            }
            temp = temp.next;
        }
    }

    //在指定的节点后面添加节点
    public void addNode(DListNode newNode,int a){
        DListNode temp = head.next;
        while (temp!=null){
            if(temp.val==a)
            {
                newNode.next=temp.next;
                if (temp.next != null) {
                    temp.next.pre = newNode;
                }
                temp.next=newNode;
                newNode.pre=temp;
                break;
            }
            temp = temp.next;
        }
    }
    // 遍历双向链表 遍历时和单链表一致  向前向后遍历都行
    public void showDListNode(DListNode head){
        if (head == null||head.next == null) {
            return;
        }
        DListNode temp = head;
        while(temp .next!= null) {
            temp=temp.next;
            System.out.println(temp.val);
        }
    }
}
